/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package doc2db.fileWorker;

import doc2db.Keey;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 *
 * @author yuriy
 */
public class FileWorker {
    private static String fname = "";
    private static String ffile = "";
    private static long lastModifFile = 0;

    /**
     * <p>Определяет естли данная запись в указанном файле.
     * Необходимо указывать её первую чясть
     * К примеру есть ли пользователь с указанным именем.</p>
     * @param fileName имя файла
     * @param whatInit какая именно запись
     * @return true, усли есть и false если нет
     */
    public static boolean isInit(String fileName, String whatInit){
        if(!new File(fileName).exists()){
            return false;
        }

        String [] file = FileIO.readFromFiles(fileName).split("\n");

        if(file == null){
            return false;
        }

        for (int i = 0; i < file.length; i++) {
            String string = "";
            try {
                string = file[i].split("==")[0];//.trim();
                if (string.equals(whatInit)) {
                    return true;
                }
            } catch (ArrayIndexOutOfBoundsException e) {
            }
        }
        return false;
    }

    /**
     * <p>Определяет как инициализированна запись.
     * К примеру какой пароль данного пользователя</p>
     * @param fileName имя файла
     * @param whatInit какая именно запись
     * @return её инициализацию или null если такой нет
     */
    public static String howInit(String fileName, String whatInit){
        if(! isInit(fileName, whatInit))
            return "null";
        
        final long lm = new File(fname).lastModified();
        if(fname.equals(fileName) && lastModifFile >= lm){
        }else{
            fname = fileName;
            ffile = FileIO.readFromFiles(fileName);
            lastModifFile = lm;
        }
        String [] file = ffile.split("\n");
        for (int i = 0; i < file.length; i++) {
            String string = "";
            try {
                string = file[i].split("==")[0];//.trim();
                if (string.equals(whatInit)) {
                    return file[i].split("==")[1];//.trim();
                }
            } catch (ArrayIndexOutOfBoundsException e) {
            }
        }

        return "null";
    }

    /**
     * <p>Добавляет новый параметр в указанный файл</p>
     * @param fileName имя файла
     * @param whatProp название параметра
     * @param initProp его значение
     */
    public static void addNewProperty(String fileName, String whatProp, String initProp){
        try {
            BufferedWriter out = new BufferedWriter(new FileWriter(fileName, true));
            out.write(whatProp + "==" + initProp + "\n");
            out.close();
        } catch (IOException e) {
            if(Keey.debug)
                e.printStackTrace();
        }
    }

    public static String[][] getProprtyList(String fileName){
        String retFile [][] = null;
        if(! new File(fileName).exists())
            return null;

        String [] file = FileIO.readFromFiles(fileName).split("\n");
        retFile = new String [file.length][2];
        for (int i = 0; i < retFile.length; i++) {
            try {
                retFile[i][0] = file[i].split("==")[0].trim();
            } catch (ArrayIndexOutOfBoundsException e) {
                retFile[i][0] = "";
            }
            try {
                retFile[i][1] = file[i].split("==")[1].trim();
            } catch (ArrayIndexOutOfBoundsException e) {
                retFile[i][0] = "";
            }
        }

        return retFile;
    }

    public static void reWriteAllPropertyFile(String fileName, String [][] date){
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < date.length; i++) {
            if(date[i].length > 1){
                sb.append(date[i][0]);
                sb.append("==");
                sb.append(date[i][1]);
                sb.append("\n");
            }
        }
        FileIO.createFile(sb.toString(), fileName);
    }
}
